/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cataletra.db;

import java.io.File;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author arthur
 */
public class DB {

    public DB() {
        try {
            PreparedStatement criarTabela = Conexao.getInstance().getConexao().
                    prepareStatement("CREATE TEXT TABLE IF NOT EXISTS palavras ("
                    + "id INT PRIMARY KEY IDENTITY,"
                    + "tema VARCHAR(100) NOT NULL,"
                    + "palavra VARCHAR(100) NOT NULL,"
                    + ")");
            
            criarTabela.execute();
            
            String path = "./db/palavras.txt";
            File dir = new File(path);
            
            if(!dir.exists()){
                PreparedStatement criarSource = Conexao.getInstance().getConexao().
                    prepareStatement("SET TABLE palavras SOURCE 'palavras.txt; fs = ,'");
            
                criarSource.execute();
            }                
        } catch(Exception ex){
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public boolean inserir(String tema, String palavra) {
        
        if(palavra.equals("")){
            Object[] temas = getTemas();
            for(int i = 0; i < temas.length; i++){
                if(temas[i].equals(tema)){
                    return false;
                }
            }
        } else {
            Object[] palavras = getPalavras(tema);
            for(int i = 0; i < palavras.length; i++){
                if(palavras[i].equals(palavra)){
                    return false;
                }
            }
        }
            
        
        try {
            PreparedStatement ps = Conexao.getInstance().getConexao().
                    prepareStatement("INSERT INTO palavras (tema,palavra) values (?,?)");
            ps.setString(1, tema);
            ps.setString(2, palavra);

            ps.execute();

            return true;
        } catch(Exception ex){
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }

        return false;
    }

    public boolean remover(String tema, String palavra) {
        try {
            String andPalavra = "";
            if(!palavra.equals("")){
                andPalavra = " AND palavra='" + palavra + "'";
            }
            
            PreparedStatement ps = Conexao.getInstance().getConexao().
                    prepareStatement("DELETE FROM palavras WHERE tema='" + tema + "'" + andPalavra);

            ps.execute();

            return true;
        } catch(Exception ex){
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }

        return false;
    }

    public Object[] getTemas() {
        try {
            PreparedStatement ps = Conexao.getInstance().getConexao().
                    prepareStatement("SELECT tema FROM palavras");

            ResultSet resultset = ps.executeQuery();

            ArrayList<Object> temas = new ArrayList();
            while(resultset.next()){
                Object tema = resultset.getObject(1);
                if(!temas.contains(tema)) {
                    temas.add(tema);
                }
            }

            return temas.toArray();
        } catch(Exception ex){
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }

        return new String[0];
    }
    
    
    public Object[] getPalavras(String tema) {
        try {
            String andTema = "";
            if(!tema.equals("TODOS")){
                andTema = " WHERE tema='" + tema + "'";
            }
            PreparedStatement ps = Conexao.getInstance().getConexao().
                    prepareStatement("SELECT palavra FROM palavras" + andTema);

            ResultSet resultset = ps.executeQuery();

            ArrayList<Object> palavras = new ArrayList();
            while(resultset.next()){
                Object palavra = resultset.getObject(1);
                if(!palavras.contains(palavra)) {
                    palavras.add(palavra);
                }
            }
            
            return palavras.toArray();
        } catch(Exception ex){
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }

        return new String[0];
    }
}
